Desmistificando o IFC – I

Neste pequeno e didático tutorial eu pretendo mostrar que é possível fazer uma simples verificação num modelo BIM em formato IFC, desde que os dados modelados sigam uma certa estrutura. O intuito é mostrar que nem sempre precisamos de uma ferramenta de checagem de modelos para fazer algum tipo de auditoria ou análise das informações do modelo. E para isso vamos utilizar somente softwares gratuitos e perceber a vantagem do openBIM!

Como exemplo, vamos usar um modelo simples com dois spaces. O objetivo aqui é verificar automaticamente se as áreas dos spaces atendem a uma área mínima, exigência muito comum em um código de obras.

Os spaces possuem as propriedades GrossFloorArea e GrossPerimeter que correspondem à sua área bruta e ao perímetro bruto, respectivamente. Estes parâmetros são calculados pelo software modelador de origem e geralmente é preciso configurar para que estas informações sejam exportadas corretamente. Por padrão, estas informações de quantidades devem estar no QuantitySet específico da classe do objeto que estamos inspecionando. No caso dos spaces é o Qto_SpaceBaseQuantities.

Todas estas informações estão disponíveis no site da buildingsmart:

https://standards.buildingsmart.org/IFC/RELEASE/IFC4_1/FINAL/HTML/

Agora, no jupyter notebook, vamos criar um script na linguagem Python para verificar estes dois espaços do modelo:

Repare que são poucas linhas de código! Para acessar as informações do arquivo IFC com o Python vamos usar a biblioteca IfcOpenShell. Importamos ela, abrimos o arquivo e selecionamos todos os spaces do arquivo utilizando o comando:

space = ifc_file.by_type(‘IfcSpace’)

Este comando carrega para a variável spaces todos os elementos da classe IfcSpace. A seguir, criamos um pequeno dicionário contendo as áreas mínimas de acordo com a natureza de ocupação do space:

Também pedimos para que o usuário entre com o nome do parâmetro que contém a informação da natureza da ocupação do cômodo. Neste caso, utilizei um parâmetro chamado ocupancy, mas poderia ser qualquer outro. Guardamos esta informação na variável de nome paramTipo.

Depois, criamos um loop a fim de repetir as ações seguintes para cada space contido em spaces. Neste loop, pegamos todos os propertysets do space e atribuímos à variável psets. Fazemos uma pequena verificação, caso não exista no propertyset Pset_SpaceCommon o parâmetro indicado em paramTipo, então ele imprime o nome do space e a mensagem de que não foi encontrada a natureza da ocupação deste space. Caso exista, obtenho a área mínima segundo a natureza desta ocupação no dicionário criado. Obtenho os valores da área e do perímetro do propertyset Qto_SpaceBaseQuantities e imprimo estes valores

Depois verifico se a área é menor que a área mínima e imprimo a mensagem conforme a análise:

Ao executar o script, informo o nome do parâmetro que contém a natureza da ocupação do space:

O programa rapidamente analisa o modelo e imprime o relatório:

Salve o OpenBIM!

O intuito deste tutorial é apenas didático, mostrando passo a passo a lógica desenvolvida. É claro que seria preciso tratar erros e exceções, verificar adequadamente qual é a unidade de medida da área e do perímetro configurada no modelo, etc.

Precisamos entender que o modelo BIM é um grande banco de dados que quando em um formato aberto e normatizado, nos permite consumir qualquer informação disponível, sem a necessidade de ferramentas específicas que exigem formatos proprietários.